﻿using System;
using System.Globalization;
using System.Linq;
using System.Windows.Forms;
using ConnectionBase;
using CoreEveprod;

namespace EveProd
{
	public partial class FormPrix : Form
	{
		DataClassesEveProdDataContext _dataContext = new DataClassesEveProdDataContext();
		private bool _premierLancement;

		public FormPrix(bool firstStart)
		{
			InitializeComponent();
			_premierLancement = firstStart;
		}

		/// <summary>
		/// Chargement de la forme.
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void FormPrix_Load(object sender, EventArgs e)
		{
			// Je récupère la liste de tout les composants que nous aurions besoin pour faire de la prod.
			var temp = (from gg in _dataContext.Products
						select gg.IdMateriel).Distinct();
			
			// Je récupère la liste des produits.
			var produits = (from gg in _dataContext.Products
			                select gg.IdProduct).Distinct();
			
			var truc = temp.Concat(produits);
			
			var itemProduit = (from it in _dataContext.ItemsEve
							   join pd in truc on it.IdItem equals pd
			                   orderby it.NomItem
			                   select it.NomItem).Distinct();

			// Je l'affiche dans la comboBox.)
			foreach (var item in itemProduit)
			{
				comboBoxListItem.Items.Add(item);
			}
		}

		/// <summary>
		/// Permet de sauvegarder dans le DesignPattern des prix, et dans un fichier XML.
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void buttonSavePrix_Click(object sender, EventArgs e)
		{
			// Si c'est le premier 'Save', j'efface tout les prix en mémoire.
			if(_premierLancement)
			{
				MarketPriceProvider.ClearListPrix();
				_premierLancement = false;
			}

			// Je vais chercher l'id de l'item.
			try
			{
				var idItem = (from gg in _dataContext.ItemsEve
				              where comboBoxListItem.Text == gg.NomItem
				              select gg.IdItem).First();

				// Je transforme la virgule en point.
				if(textBoxPrixItem.Text.Contains(","))
				{
					textBoxPrixItem.Text.Replace(',', '.');
				}

				// Je convertis le text en Décimal.
				var dd = Convert.ToDecimal(textBoxPrixItem.Text,new CultureInfo("en-US"));

				// Si le prix est déjà présent en mémoire, je met à jour le prix.
				if(MarketPriceProvider.CheckPrice(idItem))
				{
					MarketPriceProvider.UpdatePrix(idItem,dd);
				}
				else // Sinon je l'ajoute.
				{
					MarketPriceProvider.AjoutPrix(idItem, dd);
				}
				
				// Ensuite je le sauvegarde en XML.
				MarketPriceProvider.Sauvegarder(textBoxNomPrix.Text);
			}
			catch(Exception)
			{
				MessageBox.Show("Problème avec l'item sélectionné", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
			}
		}

		/// <summary>
		/// Ferme la fenêtre.
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		private void buttonFermer_Click(object sender, EventArgs e)
		{
			Close();
		}

	}
}
